/**
 * Resumen
 * Objeto:				CGenericController.java
 * Descripcion:			Clase controladora generica sobre la cual extenderan otras clases. Contiene logica
 * 						y atributos que seran de uso comun
 * Fecha de Creacion:	03/05/2011
 * Autor:				Roger Panayfo
 * ------------------------------------------------
 * Modificaciones
 * Motivo		Fecha		Nombre		Descripcion
 */
package pe.gob.onp.workflow.action;

import java.rmi.RemoteException;
import java.util.Hashtable;

import javax.ejb.CreateException;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import pe.gob.onp.util.WidgetCreator;

import com.bean.BGenerico;
import com.ejbs.ESGenerico;
import com.icesoft.faces.component.ext.HtmlDataTable;

/**
 * Clase controladora generica sobre la cual extenderan otras clases. Contiene 
 * logica y atributos que seran de uso comun
 * @author rpanayfo
 *
 */
public class CGenericController {
	
	/**
	 * Datatable generico para poblar un listado de objetos. Varias pantallas 
	 * usaran este datatable, ya que poner datos en pantalla desde una lista de
	 * objetos es una funcion repetitiva
	 */
    protected HtmlDataTable datatableList;
    private String controller;
    protected ESGenerico ejbBase;
    protected BGenerico bean;    
    protected BGenerico beanBusqueda;	

	/**
     * Inicializa todos los componentes necesarios para cargar la pantalla
     */
	public void inicializar(){
		
	}
	
	/**
	 * Limpia todos los controles de la pantalla, es decir, borra el contenido
	 * (en el caso de inputtext, textarea) e inicializa los valores (en el 
	 * caso de los selectOneMenu se regresa a su primer valor)
	 */
	public void limpiarControles(){
		
	}
	
	/**
	 * Crea la estructura completa del atributo {@link #datatableList}.<br/>
	 * 1- Crea las columnas segun el orden enviado en el key 
	 * 	DATATABLE_HEADER_LIST del hashtable properties 
	 * 	  parametro<br/>
	 * 2- Por cada columna, se encarga de agregar un outputText que contendra
	 * 	  el valor de un atributo de un objeto perteneciente a la lista
	 *    enviado en el key DATATABLE_SOURCE_LIST<br/>
	 * @param properties hashtable con las propiedades necesarias para la 
	 * implementacion del datatable. Se requiere lo siguiente:<br/><br/>
	 * - DATATABLE_HEADER_LIST : lista con los textos de cabecera<br/>
	 * - DATATABLE_SOURCE_LIST : lista de objetos que poblara el datatable<br/>
	 * - DATATABLE_VAR : texto del atributo VAR del datatable<br/>
	 * - DATATABLE_NUMBER_ROWS : numero de filas por paginas<br/>
	 * - DATATABLE_WIDTH : texto con el valor del atributo WIDTH del 
	 *  datatable<br/>
	 * - DATATABLE_SOURCE_LIST_BINDING : texto con el valor del atributo 
	 *  VALUE del datable<br/>
	 * - DATATABLE_COLUMN_BINDING : texto con el valor del atributo VALUE 
	 *  del HtmlOutputText que se creara por cada fila y columna<br/>
	 * - DATATABLE_PREFIX : texto con el valor del prefijo, el cual servira 
	 *  para armar el id de los componentes del datatable<br/>
	 * <br/>
	 * Todos estos valores son constantes que se encuentran dentro de la clase 
	 * {@link #Constantes}
	 * 
	 * @throws Exception
	 */
	public void crearDataTable(Hashtable properties) throws Exception{
		this.datatableList = WidgetCreator.crearDataTable(properties);
	}
	
	protected String getRequestParameter(String name) {
		return (String) FacesContext.getCurrentInstance().getExternalContext()
				.getRequestParameterMap().get(name);
	}
	
	public void registrar() throws RemoteException, CreateException{
		System.out.println("CGenericController - registrar");
        ejbBase.registrar(bean);
	}
	
	public void modificar() throws RemoteException{
		System.out.println("CGenericController - modificar");
		ejbBase.actualizar(bean);
	}
	
	public void eliminar() throws RemoteException{
		System.out.println("CGenericController - eliminar");
		ejbBase.eliminar(bean);
	}
	
	public void eliminar(ActionEvent e) throws RemoteException{
		System.out.println("CGenericController - eliminar(event)");
		ejbBase.eliminar(bean);
		despuesDeEliminar(e);
	}
	
	public BGenerico buscar(BGenerico beanBusqueda) throws RemoteException{
		System.out.println("CGenericController - buscar");
		return ejbBase.buscar(beanBusqueda);
	}
	
	public void despuesDeEliminar(ActionEvent e){
		System.out.println("CGenericController - despuesDeEliminar");
	}
	
	public HtmlDataTable getDatatableList() {
		return datatableList;
	}

	public void setDatatableList(HtmlDataTable datatableList) {
		this.datatableList = datatableList;
	}
	
	public BGenerico getBean() {
		return bean;
	}

	public void setBean(BGenerico bean) {
		this.bean = bean;
	}
	
	public String getController() {
		return controller;
	}

	public void setController(String controller) {
		this.controller = controller;
	}
	
	public BGenerico getBeanBusqueda() {
		return beanBusqueda;
	}

	public void setBeanBusqueda(BGenerico beanBusqueda) {
		this.beanBusqueda = beanBusqueda;
	}
	
}
